package com.ssy.lingxi.pay.service.allInPay;

import com.ssy.lingxi.common.model.dto.UserLoginCacheDTO;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.pay.api.model.vo.request.allInPay.*;
import com.ssy.lingxi.pay.api.model.vo.request.allInPay.dto.QueryInExpDetailDTO;
import com.ssy.lingxi.pay.api.model.vo.response.allInPay.*;
import com.ssy.lingxi.pay.entity.allInPay.AllInPayBank;
import com.ssy.lingxi.pay.model.vo.request.GateWayPayVO;
import com.ssy.lingxi.pay.model.vo.request.ResendPaySMSVO;
import com.ssy.lingxi.pay.model.vo.request.UserInfoReqVO;
import com.ssy.lingxi.pay.model.vo.response.ResendPaySMSRespVO;
import com.ssy.lingxi.pay.model.vo.response.UserAuthInfoVO;

import java.util.List;

/**
 * 通联支付接口定义
 *
 * @author lqa
 * @version 2.0.0
 * @date 2021/11/26
 */
public interface IAllInPayService {

    Wrapper<Void> createMember(UserLoginCacheDTO sysUser);

    Wrapper<Void> personalCrate(UserLoginCacheDTO sysUser, AllInPayPersonalAuthReqVO authReqVO);

    Wrapper<Void> sendVerificationCode(UserLoginCacheDTO sysUser, SendVerificationCodeVO sendVerificationCodeVO);

    Wrapper<Void> bindPhone(UserLoginCacheDTO sysUser, BindPhoneVO bindPhoneVO);

    Wrapper<Void> setRealName(UserLoginCacheDTO sysUser, AllInPayPersonalAuthReqVO authReqVO);

    Wrapper<String> signContract(UserLoginCacheDTO sysUser, SignContractVO signContractVO);

    Wrapper<String> signContractQuery(UserLoginCacheDTO sysUser, SignContractVO signContractVO);

    Wrapper<Object> applyBindBankCard(UserLoginCacheDTO sysUser, ApplyBindBankCardVO vo);

    Wrapper<Void> bindBankCard(UserLoginCacheDTO sysUser, BindBankCardVO bindBankCardVO);

    Wrapper<Void> submitPersonal(UserLoginCacheDTO sysUser, BankCardVO bankCardVO);

    Wrapper<Void> unbindPhone(UserLoginCacheDTO sysUser, BindPhoneVO bindPhoneVO);

    Wrapper<Void> unbindBankCard(UserLoginCacheDTO sysUser, UnBindPhoneVO cardNo);

    Wrapper<Void> updatePersonal(UserLoginCacheDTO sysUser, AllInPayUpdatePersonalReqVO allInPayUpdatePersonalReqVO);

    Wrapper<Void> setCompanyInfo(UserLoginCacheDTO sysUser, AllInPayEnterPriseMemberReqVO allInPayEnterPriseMemberReqVO);

    AllInPayMemberRespVO getMemberInfo(UserLoginCacheDTO sysUser);

    Wrapper<Void> addEnterPriseMember(UserLoginCacheDTO sysUser, AllInPayEnterPriseMemberReqVO allInPayEnterPriseMemberReqVO);

    Wrapper<Object> idCardCollect(UserLoginCacheDTO sysUser, IdCardCollectVO idCardCollectVO);

    Wrapper<Void> submitEnterPriseMember(UserLoginCacheDTO sysUser, AllInPaySubmitEnterPriseMemberReqVO vo);

    BalanceVO queryBalance(Long memberId, Long memberRoleId);

    QueryInExpDetailRespVO queryInExpDetail(Long memberId, Long memberRoleId, QueryInExpDetailDTO dto);

    AllInPayMemberRespVO getAuthMemberInfo(UserLoginCacheDTO sysUser);

    FreezeMoneyRespVO freezeMoney(Long memberId, Long memberRoleId, FreezeMoneyReqVO vo);

    Wrapper<String> setPayPwd(UserLoginCacheDTO sysUser, SetPayPwdVO vo);

    Wrapper<Void> bindCompanyAccount(UserLoginCacheDTO sysUser, BindCompanyAccountVO bindCompanyAccountVO);

    DepositApplyRespVO depositApply(UserLoginCacheDTO sysUser, DepositApplyVO vo);

    WithdrawApplyRespVO withdrawApply(UserLoginCacheDTO sysUser, WithdrawApplyVO vo);

    PayRespVO pay(UserLoginCacheDTO sysUser, PayVO vo);

    ConsumeApplyRespVO balanceConsumeApply(ConsumeApplyVO vo);

   ConsumeApplyRespVO scanBalanceConsumeApply(ConsumeApplyVO vo);

    Wrapper<Void> applyBindAcct(UserLoginCacheDTO sysUser, ApplyBindAcctVO vo);

   ConsumeApplyRespVO balanceAgentCollectApply(AgentCollectApplyVO vo);

    ConsumeApplyRespVO scanAgentCollectApply(AgentCollectApplyVO vo);

    SignalAgentPayRespVO signalAgentPay(SignalAgentPayVO vo);

    String batchAgentPay(BatchAgentPayVO vo);

    RefundRespVO refund(RefundVO vo);

    ApplicationTransferRespVO applicationTransfer(ApplicationTransferVO vo);

    List<AllInPayBank> getBankList();

    UserAuthInfoVO getUserInfo(UserInfoReqVO userInfoReqVO);

    String gateWayPay(Long memberId,Long memberRoleId, GateWayPayVO gateWayPayVO);

    ResendPaySMSRespVO reSendPaySMS(ResendPaySMSVO resendPaySMSVO);

    String getUserPhone(UserInfoReqVO userInfoReqVO);

    OrderSplitRefundRespVO orderSplitRefund(OrderSplitRefundVO vo);
}
